import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Date;

public class SessionServlet extends HttpServlet {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Override
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws IOException, ServletException {
		// Establece el tipo MIME del mensaje de respuesta
		response.setContentType("text/html");
		// Crea un flujo de salida para escribir la respuesta a la peticion del
		// cliente
		PrintWriter out = response.getWriter();
		// Recoge la sesion actual si existe, en otro caso crea una nueva
		HttpSession session = request.getSession();
		Integer contadorAccesos;
		synchronized (session) {
			contadorAccesos = (Integer) session.getAttribute("contadorAccesos");
			if (contadorAccesos == null) {
				contadorAccesos = 0;
			} else {
				contadorAccesos = new Integer(contadorAccesos + 1);
			}
			session.setAttribute("contadorAccesos", contadorAccesos);
		}
		// Escribe el mensaje de respuesta en una pagina html
		try {
			out.println("<!DOCTYPE html>");
			out.println("<html>");
			out.println("<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>");
			out.println("<title>Servlet de prueba de sesion</title></head><body>");
			out.println("<h2>Accesos: " + contadorAccesos
					+ " en esta sesion.</h2>");
			out.println("<p>(Identificador de sesion: " + session.getId()
					+ ")</p>");
			out.println("<p>(Fecha de creacion de la sesion: "
					+ new Date(session.getCreationTime()) + ")</p>");
			out.println("<p>(Fecha de ultimo acceso a la sesion "
					+ new Date(session.getLastAccessedTime()) + ")</p>");
			out.println("<p>(Maximo tiempo inactivo de la sesion: "
					+ session.getMaxInactiveInterval() + " seconds)</p>");
			out.println("<p><a href='" + request.getRequestURI()
					+ "'>Refrescar</a>");
			out.println("<p><a href='"
					+ response.encodeURL(request.getRequestURI())
					+ "'>Refrescar con reescritura de URLs</a>");
			out.println("</body></html>");
		} finally {
			out.close(); // Cerrar el flujo de salida
		}
	}
}
